#include "Nano100Series.h"
#include "I2c.h"
#include "GpioI2c2.h"
#include "Common.h"

static struct gpio_i2c_handle_t gpio_i2c2_handle;


static void GpioI2c2OpSetScl(enum gpio_i2c_level_t value)
{
	if (value == GPIO_I2C_LEVEL_H) {
		GPIO_SetMode(I2C2_SCL_PORT, I2C2_SCL_BIT, GPIO_PMD_INPUT);
	} else {
		GPIO_SetMode(I2C2_SCL_PORT, I2C2_SCL_BIT, GPIO_PMD_OUTPUT);
	}
}

static enum gpio_i2c_level_t GpioI2c2OpGetScl(void)
{
	return (enum gpio_i2c_level_t)(I2C2_SCL_PIN);
}

static void GpioI2c2OpSetSda(enum gpio_i2c_level_t value)
{
	if (value == GPIO_I2C_LEVEL_H) {
		GPIO_SetMode(I2C2_SDA_PORT, I2C2_SDA_BIT, GPIO_PMD_INPUT);
	} else {
		GPIO_SetMode(I2C2_SDA_PORT, I2C2_SDA_BIT, GPIO_PMD_OUTPUT);
	}
}

static enum gpio_i2c_level_t GpioI2c2OpGetSda(void)
{
	return (enum gpio_i2c_level_t)(I2C2_SDA_PIN);
}

void GpioI2c2Init(void)
{
	I2C2_SDA_PIN = 0;
	I2C2_SCL_PIN = 0;
	GpioI2cInit(&gpio_i2c2_handle,
				GpioI2c2OpSetScl,
				GpioI2c2OpGetScl,
				GpioI2c2OpSetSda,
				GpioI2c2OpGetSda,
				100 * 1000);
}

int GpioI2c2Xfer(struct i2c_msg_t *i2c_msg)
{
	return GpioI2cXfer(&gpio_i2c2_handle, i2c_msg);
}
